/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.view;

import br.jm.financeiro.datamodel.LazyEmpresa;
import br.jm.financeiro.entity.Empresa;
import br.jm.financeiro.sistema.eao.EmpresaEao;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class EmpresaBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private Empresa selectedEmpresa;
    private LazyDataModel<Empresa> lazyModel;
    private final EmpresaEao EmpresaJpa;
    private boolean disable;

    public EmpresaBean() {
        EmpresaJpa = EmpresaEao.getInstance();
        selectedEmpresa = new Empresa();

        lazyModel = new LazyEmpresa(EmpresaJpa);
    }

    public void incluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            if (selectedEmpresa.getNumProposta().replace(" ", "").length() < 8) {
                msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Numero da Proxima Proposta Inválido\nPreencha com ZEROS A ESQUERDA!", selectedEmpresa.getNomEmpresa());
            } else {
                EmpresaJpa.create(selectedEmpresa);
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Empresa Incluida com Sucesso: ".concat(selectedEmpresa.getNomEmpresa())), selectedEmpresa.getNomEmpresa());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Incluir", selectedEmpresa.getNomEmpresa());
        } finally {
            this.disable = false;
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            if (selectedEmpresa.getNumProposta().replace(" ", "").length() < 8) {
                msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Numero da Proxima Proposta Inválido\nPreencha com ZEROS A ESQUERDA!", selectedEmpresa.getNomEmpresa());
            } else {
                EmpresaJpa.edit(selectedEmpresa);
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Empresa Alterada com Sucesso: ".concat(selectedEmpresa.getNomEmpresa())), selectedEmpresa.getNomEmpresa());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar", selectedEmpresa.getNomEmpresa());
        } finally {
            this.disable = false;
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        FacesMessage msg = null;

        try {
            if (selectedEmpresa.getIdEmpresa() == 1) {
                msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "ATENÇÃO ... Essa Empresa não pode ser Excluida!", selectedEmpresa.getNomEmpresa());
            } else {
                EmpresaJpa.destroy(selectedEmpresa);
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Empresa Excluida com Sucesso: ".concat(selectedEmpresa.getNomEmpresa())), selectedEmpresa.getNomEmpresa());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Esta Empresa esta sendo utilizada nas PROPOSTAS!", selectedEmpresa.getNomEmpresa());
        } finally {
            this.disable = false;
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public LazyDataModel<Empresa> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<Empresa> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public Empresa getSelectedEmpresa() {
        return selectedEmpresa;
    }

    public void setSelectedEmpresa(Empresa selectedEmpresa) {
        this.selectedEmpresa = selectedEmpresa;
    }

    public boolean isDisable() {
        return disable;
    }

    public void setDisable(boolean disable) {
        this.disable = disable;
    }

    public void preparaInserir(ActionEvent actionEvent) {
        this.disable = true;
        this.selectedEmpresa = new Empresa();
    }
}
